package likouJava;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class 区域划分 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param username string字符串 用户名
     * @param password string字符串 密码
     * @return bool布尔型
     */
    public boolean SignUp (String username, String password) {
        //验证用户名
        if(!validateUsername(username)){
            return false;
        }
        //验证密码
        if(!validatePassword(username, password)){
            return false;
        }
        return true;

    }

    private boolean validatePassword(String username, String password) {
        //长度
        if (password == null || password.length() < 8 || password.length() > 16){
            return false;
        }
        //统计包含字符数量
        int count = 0;
        //检测大写
        if (Pattern.compile("[A-Z]").matcher(password).find()){
            count++;
        }
        //小写
        if (Pattern.compile("[a-z]").matcher(password).find()){
            count++;
        }
        //数字
        if (Pattern.compile("[0-9]").matcher(password).find()){
            count++;
        }
        //特殊字符
         if (Pattern.compile("[^a-zA-Z0-9]").matcher(password).find()){
            count++;
        }
        if(count < 3){
            return false;
        }
        //检测是否包含用户名(忽略点，无大小写
        String usernameWithoutDot = username.replace(".","").toLowerCase();
        String passwordWithoutDot = password.replace(".","").toLowerCase();
        if (passwordWithoutDot.contains(usernameWithoutDot)){
            return false;
        }
        return true;

    }

    private boolean validateUsername(String username) {
        // 6 - 20 字符
        if(username == null || username.length() < 6 || username.length() > 20){
            return false;
        }
        //是否数字开头
        if (Character.isDigit(username.charAt(0))){
            return false;
        }
        //是否点开头或结尾
        if (username.startsWith(".") || username.endsWith(".")){
            return false;
        }
        //是否连续的点
        if (username.contains("..")){
            return false;
        }
        //检测是否只包含允许字符(大小写、数字、点)
        Pattern pattern = Pattern.compile("[^a-zA-Z0-9.]");
        Matcher matcher = pattern.matcher(username);
        if (matcher.find()){
            return false;
        }
        return true;
    }



}
